export default  {

    /**
     *
     * @param value
     * @param msg
     */
    asset(value, msg) {
        if (!value) {
            throw new Error(`error msg:${msg}`);
        }
    },

    /**
     * 产生一个自增的值
     */
    genId: function () {
        let __id = 0;
        return function () {
            return ++__id;
        }
    }(),

    /**
     * str中是否包含中文
     * @param str
     * @return {boolean}
     */
    hasChineseChar(str) {
        if (/.*[\u4e00-\u9fa5]+.*$/.test(str)) {
            return true;
        } else {
            return false;
        }
    },

    /**
     * 将 utf8 字符串 转换成 unicode 编码的数组.
     * 如：
     let src = 'string with Chinese characters 你好';
     let unicode = utils.utf8ToUnicode(src);
     console.log('unicode:',unicode);

     将 unicode 数组,转换成 utf8 字符串:
     let utf8str = utils.unicodeToUtf8(unicode);
     console.log('utf8str:',utf8str);
     * @param strUtf8 {string}
     * @return {Array} 返回一个  unicode编码 组成的数组
     */
    utf8ToUnicode(strUtf8) {
        let i, j;
        let uCode;
        let temp = [];

        for (i = 0, j = 0; i < strUtf8.length; i++) {
            uCode = strUtf8.charCodeAt(i);
            if (uCode < 0x100) {					//ASCII字符
                temp[j++] = 0x00;
                temp[j++] = uCode;
            } else if (uCode < 0x10000) {
                temp[j++] = (uCode >> 8) & 0xff;
                temp[j++] = uCode & 0xff;
            } else if (uCode < 0x1000000) {
                temp[j++] = (uCode >> 16) & 0xff;
                temp[j++] = (uCode >> 8) & 0xff;
                temp[j++] = uCode & 0xff;
            } else if (uCode < 0x100000000) {
                temp[j++] = (uCode >> 24) & 0xff;
                temp[j++] = (uCode >> 16) & 0xff;
                temp[j++] = (uCode >> 8) & 0xff;
                temp[j++] = uCode & 0xff;
            } else {
                break;
            }
        }
        temp.length = j;
        return temp;
    },

    /**
     * 将 unicode 编码的数组 转换成 utf8 字符串
     * @param unicode {Array} unicode编码组成的数组
     * @return {string}
     */
    unicodeToUtf8(unicode) {
        let uchar;
        let utf8str = "";
        let i;

        // unicode 使用2个字节表示一个
        for (i = 0; i < unicode.length; i += 2) {
            uchar = (unicode[i] << 8) | unicode[i + 1];				//UNICODE为2字节编码，一次读入2个字节
            utf8str = utf8str + String.fromCharCode(uchar);	//使用String.fromCharCode强制转换
        }
        return utf8str;
    },

    //
    /**
     *
     *  String.prototype.codePointAt 和 String.fromCodePoint 就是能够
     *  将字符串转换为Unicode的UTF-16编码以及从UTF-16编码转换为字符串的函数.
     *  并且支持 超过 0xffff 的字符.
     *
     let str = 'hello world!我们的队伍像太阳...ஷ';
     let arr = [];
     for (let i = 0; i < str.length; ++i) {
            arr.push(utils.chineseToUtf16(str[i], true));
        }
     console.log(arr);
     let ret = '';
     arr.forEach(item => {
            ret += utils.utf16ToChinese(item);
        });
     console.log('ret:', ret);
     * @param lstUnicode
     * @return {string}
     */
    utf16ToChinese(lstUnicode) {
        return String.fromCodePoint(lstUnicode);
    },

    /**
     * 返回的是 字符串
     * @param ch
     * @param is16
     * @return {string}
     */
    chineseToUtf16(ch, is16 = false) {
        let num_ten = ch.codePointAt(ch);
        if (is16) {
            return '0x' + num_ten.toString(16);
        } else {
            return num_ten.toString();
        }
    },
};

